{
 "metadata": {
  "name": "",
  "signature": "sha256:2265ab05ee3762483fc876b9fb5200a72c50dbfe9330bd0803394c93391f3e1e"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from nilmtk import DataSet\n",
      "\n",
      "redd = DataSet('/data/REDD/redd.h5')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 1
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "redd.metadata"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 2,
       "text": [
        "{'contact': 'zkolter@cs.cmu.edu',\n",
        " 'creators': ['Kolter, Zico', 'Johnson, Matthew'],\n",
        " 'description': 'Several weeks of power data for 6 different homes.',\n",
        " 'geo_location': {'country': 'US',\n",
        "  'latitude': 42.360091,\n",
        "  'locality': 'Massachusetts',\n",
        "  'longitude': -71.09416},\n",
        " 'institution': 'Massachusetts Institute of Technology (MIT)',\n",
        " 'long_name': 'The Reference Energy Disaggregation Data set',\n",
        " 'meter_devices': {'REDD_whole_house': {'description': u'REDD\\'s DIY power meter used to measure whole-home AC waveforms at high frequency.  To quote from their paper: \"CTs from TED (http://www.theenergydetective.com) to measure current in the power mains, a Pico TA041 oscilloscope probe (http://www.picotechnologies.com) to measure voltage for one of the two phases in the home, and a National Instruments NI-9239 analog to digital converter to transform both these analog signals to digital readings. This A/D converter has 24 bit resolution with noise of approximately 70 \\xb5V, which determines the noise level of our current and voltage readings: the TED CTs are rated for 200 amp circuits and a maximum of 3 volts, so we are able to differentiate between currents of approximately ((200))(70 \\xd7 10\\u22126)/(3) = 4.66mA, corresponding to power changes of about 0.5 watts. Similarly, since we use a 1:100 voltage stepdown in the oscilloscope probe, we can detect voltage differences of about 7mV.\"\\n',\n",
        "   'max_sample_period': 30,\n",
        "   'measurements': [{'lower_limit': 0,\n",
        "     'physical_quantity': 'power',\n",
        "     'type': 'apparent',\n",
        "     'upper_limit': 50000}],\n",
        "   'sample_period': 1,\n",
        "   'wireless': False},\n",
        "  'eMonitor': {'description': 'Measures circuit-level power demand.  Comes with 24 CTs. This FAQ page suggests the eMonitor measures real (active) power: http://www.energycircle.com/node/14103  although the REDD readme.txt says all channels record apparent power.\\n',\n",
        "   'manufacturer': 'Powerhouse Dynamics',\n",
        "   'manufacturer_url': 'http://powerhousedynamics.com',\n",
        "   'max_sample_period': 50,\n",
        "   'measurements': [{'lower_limit': 0,\n",
        "     'physical_quantity': 'power',\n",
        "     'type': 'active',\n",
        "     'upper_limit': 5000}],\n",
        "   'model': 'eMonitor',\n",
        "   'sample_period': 3,\n",
        "   'wireless': False}},\n",
        " 'name': 'REDD',\n",
        " 'number_of_buildings': 6,\n",
        " 'publication_date': 2011,\n",
        " 'related_documents': ['http://redd.csail.mit.edu',\n",
        "  'J. Zico Kolter and Matthew J. Johnson. REDD: A public data set for energy disaggregation research. In proceedings of the SustKDD workshop on Data Mining Applications in Sustainability, 2011. http://redd.csail.mit.edu/kolter-kddsust11.pdf\\n'],\n",
        " 'schema': 'https://github.com/nilmtk/nilm_metadata/tree/v0.2',\n",
        " 'subject': 'Disaggregated power demand from domestic buildings.',\n",
        " 'timezone': 'US/Eastern'}"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "redd.buildings"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 3,
       "text": [
        "OrderedDict([(1, Building(instance=1, dataset='REDD')), (3, Building(instance=3, dataset='REDD')), (2, Building(instance=2, dataset='REDD')), (5, Building(instance=5, dataset='REDD')), (4, Building(instance=4, dataset='REDD')), (6, Building(instance=6, dataset='REDD'))])"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "redd.buildings[1]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 4,
       "text": [
        "Building(instance=1, dataset='REDD')"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "redd.buildings[1].elec"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 5,
       "text": [
        "MeterGroup(meters=\n",
        "  ElecMeter(instance=1, building=1, dataset='REDD', site_meter, appliances=[])\n",
        "  ElecMeter(instance=2, building=1, dataset='REDD', site_meter, appliances=[])\n",
        "  ElecMeter(instance=5, building=1, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])\n",
        "  ElecMeter(instance=6, building=1, dataset='REDD', appliances=[Appliance(type='dish washer', instance=1)])\n",
        "  ElecMeter(instance=7, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=1)])\n",
        "  ElecMeter(instance=8, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=2)])\n",
        "  ElecMeter(instance=9, building=1, dataset='REDD', appliances=[Appliance(type='light', instance=1)])\n",
        "  ElecMeter(instance=11, building=1, dataset='REDD', appliances=[Appliance(type='microwave', instance=1)])\n",
        "  ElecMeter(instance=12, building=1, dataset='REDD', appliances=[Appliance(type='unknown', instance=1)])\n",
        "  ElecMeter(instance=13, building=1, dataset='REDD', appliances=[Appliance(type='electric space heater', instance=1)])\n",
        "  ElecMeter(instance=14, building=1, dataset='REDD', appliances=[Appliance(type='electric stove', instance=1)])\n",
        "  ElecMeter(instance=15, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=3)])\n",
        "  ElecMeter(instance=16, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=4)])\n",
        "  ElecMeter(instance=17, building=1, dataset='REDD', appliances=[Appliance(type='light', instance=2)])\n",
        "  ElecMeter(instance=18, building=1, dataset='REDD', appliances=[Appliance(type='light', instance=3)])\n",
        "  ElecMeter(instance=19, building=1, dataset='REDD', appliances=[Appliance(type='unknown', instance=2)])\n",
        "  MeterGroup(meters=\n",
        "    ElecMeter(instance=3, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])\n",
        "    ElecMeter(instance=4, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])\n",
        "  )\n",
        "  MeterGroup(meters=\n",
        "    ElecMeter(instance=10, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])\n",
        "    ElecMeter(instance=20, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])\n",
        "  )\n",
        ")"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "redd.buildings[1].elec.mains()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 6,
       "text": [
        "MeterGroup(meters=\n",
        "  ElecMeter(instance=1, building=1, dataset='REDD', site_meter, appliances=[])\n",
        "  ElecMeter(instance=2, building=1, dataset='REDD', site_meter, appliances=[])\n",
        ")"
       ]
      }
     ],
     "prompt_number": 6
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "redd.buildings[1].elec.mains().total_energy()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 7,
       "text": [
        "167.76623618641219"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "redd.buildings[1].elec[1].total_energy()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 8,
       "text": [
        "99.271402796506891"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "redd.buildings[1].elec[2].total_energy()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 14,
       "text": [
        "68.494833389905295"
       ]
      }
     ],
     "prompt_number": 14
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter = redd.buildings[1].elec[2]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 11
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter.total_energy?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 12
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter.device"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 15,
       "text": [
        "{'description': u'REDD\\'s DIY power meter used to measure whole-home AC waveforms at high frequency.  To quote from their paper: \"CTs from TED (http://www.theenergydetective.com) to measure current in the power mains, a Pico TA041 oscilloscope probe (http://www.picotechnologies.com) to measure voltage for one of the two phases in the home, and a National Instruments NI-9239 analog to digital converter to transform both these analog signals to digital readings. This A/D converter has 24 bit resolution with noise of approximately 70 \\xb5V, which determines the noise level of our current and voltage readings: the TED CTs are rated for 200 amp circuits and a maximum of 3 volts, so we are able to differentiate between currents of approximately ((200))(70 \\xd7 10\\u22126)/(3) = 4.66mA, corresponding to power changes of about 0.5 watts. Similarly, since we use a 1:100 voltage stepdown in the oscilloscope probe, we can detect voltage differences of about 7mV.\"\\n',\n",
        " 'max_sample_period': 30,\n",
        " 'measurements': [{'lower_limit': 0,\n",
        "   'physical_quantity': 'power',\n",
        "   'type': 'apparent',\n",
        "   'upper_limit': 50000}],\n",
        " 'sample_period': 1,\n",
        " 'wireless': False}"
       ]
      }
     ],
     "prompt_number": 15
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "redd.buildings[1].elec.draw_wiring_graph()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 18
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Using matplotlib backend: Qt4Agg\n",
        "Populating the interactive namespace from numpy and matplotlib\n"
       ]
      }
     ],
     "prompt_number": 17
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec = redd.buildings[1].elec"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 19
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 20
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter.available_power_ac_types()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 21,
       "text": [
        "['apparent']"
       ]
      }
     ],
     "prompt_number": 21
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec.mains().available_power_ac_types()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 22,
       "text": [
        "{'apparent'}"
       ]
      }
     ],
     "prompt_number": 22
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec.submeters().available_power_ac_types()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 24,
       "text": [
        "{'active'}"
       ]
      }
     ],
     "prompt_number": 24
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec.proportion_of_energy_submetered()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "/home/jack/workspace/python/nilmtk/nilmtk/metergroup.py:651: UserWarning: As a quick implementation we only get Good Sections from the first meter in the meter group.  We should really return the intersection of the good sections for all meters.  This will be fixed...\n",
        "  warn(\"As a quick implementation we only get Good Sections from\"\n",
        "/home/jack/workspace/python/nilmtk/nilmtk/measurement.py:56: RuntimeWarning: None of the AC types recorded by Mains are present in `available_ac_types`. Will use try using one of ['active', 'apparent', 'reactive'].\n",
        "  \" Will use try using one of {}.\".format(AC_TYPES), RuntimeWarning)\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "/home/jack/workspace/python/nilmtk/nilmtk/metergroup.py:601: UserWarning: at least one section requested from 'ElecMeter(instance=1, building=1, dataset='REDD', site_meter, appliances=[])' required multiple chunks to be loaded into memory. This may cause a failure when we try to unify results from multiple meters.\n",
        "  \" meters.\".format(meter))\n",
        "/home/jack/workspace/python/nilmtk/nilmtk/metergroup.py:601: UserWarning: at least one section requested from 'ElecMeter(instance=2, building=1, dataset='REDD', site_meter, appliances=[])' required multiple chunks to be loaded into memory. This may cause a failure when we try to unify results from multiple meters.\n",
        "  \" meters.\".format(meter))\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 25,
       "text": [
        "0.75962890625021773"
       ]
      }
     ],
     "prompt_number": 25
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 26,
       "text": [
        "ElecMeter(instance=2, building=1, dataset='REDD', site_meter, appliances=[])"
       ]
      }
     ],
     "prompt_number": 26
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter.total_energy()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 27,
       "text": [
        "68.494833389905295"
       ]
      }
     ],
     "prompt_number": 27
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter.get_timeframe()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 29,
       "text": [
        "TimeFrame(start='2011-04-18 09:22:09-04:00', end='2011-05-24 15:57:02-04:00', empty=False)"
       ]
      }
     ],
     "prompt_number": 29
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from nilmtk import TimeFrame"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 30
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter = elec[2]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 31
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "tf = TimeFrame(\"2011-04-25\", \"2011-05-01\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 32
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "tf"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 33,
       "text": [
        "TimeFrame(start='2011-04-25 00:00:00', end='2011-05-01 00:00:00', empty=False)"
       ]
      }
     ],
     "prompt_number": 33
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter.total_energy(sections=[tf])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 42,
       "text": [
        "17.985797864165836"
       ]
      }
     ],
     "prompt_number": 42
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import matplotlib.pyplot as plt"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 47
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter.plot(sections=[tf])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 52
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Using matplotlib backend: Qt4Agg\n",
        "Populating the interactive namespace from numpy and matplotlib\n"
       ]
      }
     ],
     "prompt_number": 51
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec.plot()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 56,
       "text": [
        "<matplotlib.axes.AxesSubplot at 0x7fc224311b10>"
       ]
      }
     ],
     "prompt_number": 56
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Using matplotlib backend: Qt4Agg\n",
        "Populating the interactive namespace from numpy and matplotlib\n"
       ]
      }
     ],
     "prompt_number": 55
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "elec.plot?"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 57
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter.good_sections()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 58,
       "text": [
        "[TimeFrame(start='2011-04-18 09:22:09-04:00', end='2011-04-18 13:58:47-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-18 14:03:07-04:00', end='2011-04-19 12:13:38-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-19 12:14:17-04:00', end='2011-04-19 18:45:19-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-19 20:20:08-04:00', end='2011-04-20 01:54:32-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-20 01:55:36-04:00', end='2011-04-20 02:28:14-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-20 02:28:52-04:00', end='2011-04-21 03:17:09-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-21 06:17:17-04:00', end='2011-04-21 17:45:06-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-21 19:41:29-04:00', end='2011-04-22 22:46:57-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-22 22:48:33-04:00', end='2011-04-24 03:48:50-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-24 03:52:24-04:00', end='2011-04-24 20:46:36-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-24 20:47:17-04:00', end='2011-04-27 02:50:19-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-27 02:51:21-04:00', end='2011-04-27 03:17:34-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-27 03:21:15-04:00', end='2011-04-28 05:57:47-04:00', empty=False),\n",
        " TimeFrame(start='2011-04-29 23:10:34-04:00', end='2011-05-01 09:44:42-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-01 09:47:18-04:00', end='2011-05-01 23:14:16-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-01 23:14:17-04:00', end='2011-05-02 17:04:59-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-02 17:07:27-04:00', end='2011-05-03 17:30:17-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-03 17:32:49-04:00', end='2011-05-03 17:33:44-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-06 10:51:46-04:00', end='2011-05-07 01:53:10-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-07 01:53:55-04:00', end='2011-05-07 02:38:15-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-07 02:40:43-04:00', end='2011-05-07 11:59:16-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-11 03:19:43-04:00', end='2011-05-12 17:48:38-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-12 20:14:30-04:00', end='2011-05-13 05:16:24-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-22 16:04:46-04:00', end='2011-05-22 23:39:01-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-22 23:41:35-04:00', end='2011-05-23 09:22:08-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-23 10:31:34-04:00', end='2011-05-24 14:32:05-04:00', empty=False),\n",
        " TimeFrame(start='2011-05-24 15:55:33-04:00', end='2011-05-24 15:57:02-04:00', empty=False)]"
       ]
      }
     ],
     "prompt_number": 58
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "meter.device"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 59,
       "text": [
        "{'description': u'REDD\\'s DIY power meter used to measure whole-home AC waveforms at high frequency.  To quote from their paper: \"CTs from TED (http://www.theenergydetective.com) to measure current in the power mains, a Pico TA041 oscilloscope probe (http://www.picotechnologies.com) to measure voltage for one of the two phases in the home, and a National Instruments NI-9239 analog to digital converter to transform both these analog signals to digital readings. This A/D converter has 24 bit resolution with noise of approximately 70 \\xb5V, which determines the noise level of our current and voltage readings: the TED CTs are rated for 200 amp circuits and a maximum of 3 volts, so we are able to differentiate between currents of approximately ((200))(70 \\xd7 10\\u22126)/(3) = 4.66mA, corresponding to power changes of about 0.5 watts. Similarly, since we use a 1:100 voltage stepdown in the oscilloscope probe, we can detect voltage differences of about 7mV.\"\\n',\n",
        " 'max_sample_period': 30,\n",
        " 'measurements': [{'lower_limit': 0,\n",
        "   'physical_quantity': 'power',\n",
        "   'type': 'apparent',\n",
        "   'upper_limit': 50000}],\n",
        " 'sample_period': 1,\n",
        " 'wireless': False}"
       ]
      }
     ],
     "prompt_number": 59
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}